靜態、類別、實例方法(method)/變數


靜態

  • 不需要instance便可以使用
  • 可以不帶裝飾器,呼叫都是使用class存取
  • 無法存取類別或實例屬性

    class cls1():
      a = 1
      @staticmethod
      def output():
          print("I have decorator")
    
      def output2():
          print("I don't have decorator")
    # usage
    cls1.output()
    cls1.output2()
    

類別

  • 不需要instance便可以使用
  • 類別變數是所有類別共用,可以用class 或 instance 存取
  • 如果不帶裝飾器,在使用時須要把類別作為參數傳入

    class cls1():
      a = 1
      @classmethod
      def output(cls):
          print("I have decorator")
          print(cls.a)
    
      def output_without_decorator(cls):
          print("I don't have decorator")
    # usage
    cls1.output()
    cls1.output_without_decorator(cls1)
    print(cls1.a) # 1
    inst = cls1()
    print(inst.a) # 1
    

實例

  • 實例方法需要傳入self(即instance),其名稱是可以自定義的
  • 可以建立與類別變數名稱相同的實例變數,這並不影響類別屬性
  • Instance在找變數時會先依續尋找: instance 屬性> class屬性
class cls1():
    a = 1
    def output(self):
        print(self.a)
        self.a = 2
        print("I have decorator")
        print(self.a)

# usage
inst = cls1()
inst.output() # 1, I have decorator, 2
print(inst.a) # 2
print(cls1.a) # 1







你可能感興趣的文章

API 留言板練習-Part 2 : 前端串 API

API 留言板練習-Part 2 : 前端串 API

建立自動化檢查的 React App(Husky, prettier, eslint, lint-statge)

建立自動化檢查的 React App(Husky, prettier, eslint, lint-statge)

[C#] 同網站下,不同應用程式在ASP.NET MVC 使用 Owin 驗證的登入登出問題

[C#] 同網站下,不同應用程式在ASP.NET MVC 使用 Owin 驗證的登入登出問題






留言討論